package com.aischool.utils;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

public class FileUtil {

	/**
	 * 保存文件到指定目录。不如 file.renameTo(文件名);
	 */
	public static boolean saveFile(String savePath, String saveName, File tempFile, HttpServletRequest request)
			throws Exception {
		
		byte[] data = getBytes(tempFile); 
		
		File saveDir = new File(savePath);
		File saveFile = new File(savePath + saveName);
		
		if (!saveDir.exists()) {
			if (!saveDir.mkdir()) {
				throw new Exception("文件夹创建失败！路径为：" + savePath);
			}
		}

		// 创建输出流
		try (FileOutputStream outStream = new FileOutputStream(saveFile)) {// 写入数据
			outStream.write(data);
			outStream.flush();

		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
		return saveFile.exists();
	}

	// ----------------获得指定文件的byte数组 ----------------
	public static byte[] getBytes(String filePath) {
		File file = new File(filePath);
		return getBytes(file);
	}

	public static byte[] getBytes(File file) {
		byte[] buffer = null;
		try {
			// File file = new File(filePath);
			FileInputStream fis = new FileInputStream(file);
			ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
			byte[] b = new byte[1000];
			int n;
			while ((n = fis.read(b)) != -1) {
				bos.write(b, 0, n);
			}
			fis.close();
			bos.close();
			buffer = bos.toByteArray();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return buffer;
	}

	// ----------------根据byte数组，生成文件 ----------------
	public static void getFile(byte[] bfile, String filePath, String fileName) {
		BufferedOutputStream bos = null;
		FileOutputStream fos = null;
		File file = null;
		try {
			File dir = new File(filePath);
			if (!dir.exists() && dir.isDirectory()) {// 判断文件目录是否存在
				dir.mkdirs();
			}
			file = new File(filePath + "\\" + fileName);
			fos = new FileOutputStream(file);
			bos = new BufferedOutputStream(fos);
			bos.write(bfile);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (bos != null) {
				try {
					bos.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
			if (fos != null) {
				try {
					fos.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
		}
	}
}
